Data ring topology buses are an increasingly important part of computer architecture design. A data ring can be generally defined as a circular coupling of nodes of processors, wherein the data output of one processor can be input into the input of another processor within the data ring.
Inputting data from the outside of the ring, also known as injecting data into the ring, while trying to forward data already existing within the data ring, can create problems. During a clock cycle, a processor node of the data ring can inject one data packet onto the ring. Alternatively, the node can forward one packet onto the data ring. However, the node can not both inject a packet onto the ring and forward a packet within the data ring simultaneously during the same clock cycle.
If the data to be injected from outside the data ring into the ring is given absolute priority over data already existing within the ring, the data ring can become clogged with data packets. For instance, if each node is injecting data from outside onto the ring simultaneously before forwarding any cached data packets in the next round, the data rings could get clogged. This could be because each node is injecting data, and there could be more data than the data ring could handle. Alternatively, giving absolute priority to forwarded data packets over injected data packets could also create problems. For instance, if two processing nodes of a three or more node bus ring are separated by at least one interposed node, communication between the two separated nodes could prevent new inject packets from entering the network from the interposed node.
One conventional approach to solve the conflict between differing priorities between injected versus forwarded data packets is to transmit a predetermined ratio of forwarded packets to injected packets. Typically, processing nodes have buffers for both received forwarded packets and injected packets, both of which are to be placed in the ring. The fixed ratio can work well in a highly utilized ring wherein all the processing nodes evenly inject new data in proportion to the forwarded data and the injection rate at the nodes is known and generally constant.
However, there is a problem with using a fixed ratio of transmitting forwarded data packets to injected data packets. Sometimes, a fixed ratio does not react well to changes in the ratio to forwarded versus injected traffic. Sometimes, a fixed ratio does not react well to changes in the instantaneous relationship of forwarded versus injected traffic.
Therefore, there is a need for a system and a method for injecting data packets into a bus data ring that overcomes at least some of the problems associated with conventional injection of data packets into a bus data ring.